//给你一个由小写英文字母（'a' 到 'z'）组成的字符串 s。你的任务是找出出现频率 最高 的元音（'a'、'e'、'i'、'o'、'u' 中的一个）和出现
//频率最高的辅音（除元音以外的所有字母），并返回这两个频率之和。 
//
// 注意：如果有多个元音或辅音具有相同的最高频率，可以任选其中一个。如果字符串中没有元音或没有辅音，则其频率视为 0。 一个字母 
//x 的 
//频率 是它在字符串中出现的次数。
//
// 
//
// 示例 1： 
//
// 
// 输入: s = "successes" 
// 
//
// 输出: 6 
//
// 解释: 
//
// 
// 元音有：'u' 出现 1 次，'e' 出现 2 次。最大元音频率 = 2。 
// 辅音有：'s' 出现 4 次，'c' 出现 2 次。最大辅音频率 = 4。 
// 输出为 2 + 4 = 6。 
// 
//
// 示例 2： 
//
// 
// 输入: s = "aeiaeia" 
// 
//
// 输出: 3 
//
// 解释: 
//
// 
// 元音有：'a' 出现 3 次，'e' 出现 2 次，'i' 出现 2 次。最大元音频率 = 3。 
// s 中没有辅音。因此，最大辅音频率 = 0。 
// 输出为 3 + 0 = 3。 
// 
//
// 
//
// 提示: 
//
// 
// 1 <= s.length <= 100 
// s 只包含小写英文字母 
// 
//
// Related Topics 哈希表 字符串 计数 👍 16 👎 0


package LeetCode.editor.cn;

import java.util.Set;

/**
 * @author ldltd
 * @date 2025-09-14 13:14:49
 * @description 3541.找到频率最高的元音和辅音
 */
public class FindMostFrequentVowelAndConsonant{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 FindMostFrequentVowelAndConsonant fun=new FindMostFrequentVowelAndConsonant();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int maxFreqSum1(String s) {
        int [] ar=new int[256];
		Set<Character> set=Set.of('a','e','i','o','u');
		int a=0,b=0;
		for (char c : s.toCharArray()) {
			ar[c]++;
			if(set.contains(c)){
				a=Math.max(a,ar[c]);
			}else{
				b=Math.max(b,ar[c]);
			}
		}
		return a+b;
    }
/*
*
* {a,e,i,o,u}
视作数字
2 0+2 4+2 8+2 14+2 20=1065233
即十六进制的 0x104111。
可以用位运算快速判断字母是否在元音集合中。
* */

	public int maxFreqSum(String s) {
		final int VOWEL_MASK = 0x104111;
		int[] cnt = new int[26];
		//分别记录辅音元音0 1
		int[] maxCnt = new int[2];
		for (char ch : s.toCharArray()) {
			ch -= 'a';
			int bit = VOWEL_MASK >> ch & 1;
			cnt[ch]++;
			maxCnt[bit] = Math.max(maxCnt[bit], cnt[ch]);
		}
		return maxCnt[0] + maxCnt[1];
	}

}
//leetcode submit region end(Prohibit modification and deletion)

}
